用户与组管理
==================================================

一：账号的管理
---------------------------------------------------------------------------------------------
（1）useradd：创建一个新的用户或更新默认的新用户信息
SYNOPSIS
       useradd [options] LOGIN
       useradd -D
       useradd -D [options]
OPTIONS
       -c, --comment COMMENT：是一个简短的登录描述，默认是用户的全名。
                        ~]# useradd -c 'login description' test

       -d, --home-dir HOME_DIR：指定用户家目录：目标路径不能事先存在，否则会有警告，不会得利skel相关的文件给用户
                    ~]# mkdir /home/test1
                    ~]# ls /home
                            mdx  test1
                    ~]# useradd -d /home/test1 test1
                            useradd: warning: the home directory already exists.  Not copying any file from skel directory into it.
                            useradd：警告：这个家目录已经存在，不能复制任何文件到skel目录里
                    ~]# useradd -d /home/test2 test2

       -D, --defaults：创建用户默认选项
                  -b, --base-dir BASE_DIR
                  -e, --expiredate EXPIRE_DATE
                  -f, --inactive INACTIVE
                  -g, --gid GROUP
                  -s, --shell SHELL

       -e, --expiredate EXPIRE_DATE：用户帐户将被禁用的日期，日期格式为：YYYY-MM-DD
                  ~]# vi /etc/default/useradd
                        EXPIRE=             （默认为空）
                  ~]# useradd -e 2016-03-09 user
                  ~]# chage -l user
                        ...
                        Account expires           : Mar 09, 2016    （用户过期时间）
                        ...

       -f, --inactive INACTIVE：密码过期后的天数，直到该帐户被永久禁用。0：在密码过期时禁用该帐户，1：禁用该功能。
              ~]# vi  /etc/default/useradd （查看默认值）
                      INACTIVE=-1

       -g, --gid GROUP：指定主组（组id或者组名）
                ~]# id test
                      uid=1001(test) gid=1001(test) groups=1001(test)
                ~]# useradd -g 1001 test1   或者  useradd -g test test1
                ~]# id test1
                      uid=1003(test1) gid=1001(test) groups=1001(test)

       -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]：用户的附加组。每个组由一个逗号分隔，中间没有空格。
              ~]# useradd -G test,test1,test2,test3 user
              ~]# id users
              ~]# uid=1004(user) gid=1005(user) groups=1005(user),1001(test),1002(test2),1003(test3),1004(test1)

       -m, --create-home：强制创建家目录
                  ~]# vi /etc/login.defs
                      56 # If useradd should create home directories for users by default
                      57 # On RH systems, we do. This option is overridden with the -m flag on
                      58 # useradd command line.
                      59 #
                      60 CREATE_HOME     yes   （如果选项为no的话需要指定 -m 强制创建家目录，默认为yes）
              ~]# useradd user （默认为yes状态）
              ~]# ls /home
                    mdx  user
              ~]# vi /etc/login.defs 
                  CREATE_HOME     no   （修改为no）
              ~]# useradd test  （默认为不创建家目录）
              ~]# ls /home
                  mdx  user
              ~]# useradd -m test1   （强制创建家目录）
              ~]# ls /home
                    mdx  test1  user

       -M, --no-create-home：不创建家目录，甚至系统/etc/login.defs设置为yes
              ~]# vi /etc/login.defs 
                  CREATE_HOME     yes   （默认值为yes）
              ~]# useradd -M user
              ~]# ls /home
                  mdx

       -p, --password PASSWORD：指定用户默认登录密码
                 ~]# useradd -p 123456 user

       -r, --system：创建一个系统账户
                ~]# useradd -r user
                ~]# ls /home
                        mdx
                ~]# id user
                      uid=992(user) gid=990(user) groups=990(user)

       -s, --shell SHELL：用户的登录 shell 名，默认为留空，让系统根据 /etc/default/useradd 中的 SHELL 变量选择默认的登录shell。

       -u, --uid UID：指定用户uid
                ~]# useradd -u 2000 user
                ~]# id user
                      uid=2000(user) gid=2000(user) groups=2000(user)
            注意：用户id必须为唯一的，除非使用了 -o 选项。此值必须非负，默认使用大于等于UID_MIN，且大于任何其他用户 ID 最小值。

---------------------------------------------------------------------------------------------
（2）usermod：修改用户帐户
SYNOPSIS：
        usermod [options] LOGIN
OPTIONS：
        -c, --comment  COMMENT：用户密码文件注释字段的新值。它通常使用 chfn 修改
        -d, --home  HOME_DIR：修改家目录为新的位置，但一般应该同时使用-m选项以保证原家目录中的文件会移动到新目录中；
                ~]# ls /home
                      mdx  user
                ~]# usermod -md /home/user1 user
                ~]# ls /home
                      mdx  user1

        -g, --gid GROUP：用户新主租
                a选项，表示为用户添加新的附加组；
                ~]# id user
                      uid=1003(user) gid=1003(user) groups=1003(user)
                ~]# id test
                      uid=1002(test) gid=1002(test) groups=1002(test)
                ~]# usermod -g user test  （覆盖）
                ~]# id test
                      uid=1002(test) gid=1003(user) groups=1003(user)

        -G, --groups  GROUP1[,GROUP2,...[,GROUPN]]]：修改时会覆盖原有的附加组，同名的附加组不变，一同使用 -a 表示追加
              ~]# id user
                    uid=1003(user) gid=1003(user) groups=1003(user)
              ~]# usermod -G test1,test2,test3 user
              ~]# id user
                    uid=1003(user) gid=1003(user) groups=1003(user),1004(test2),5003(test1),5004(test3)
              ~]# usermod -G test user     （覆盖原来的组）
              ~ ]# id user
                    uid=1003(user) gid=1003(user) groups=1003(user),5002(test)
              ~]# usermod -aG test1,test2,test3 user   （一同使用-a 追加到原来的组）
              ~]# id user
                    uid=1003(user) gid=1003(user) groups=1003(user),5002(test),1004(test2),5003(test1),5004(test3)

        -l, --login  NEW_LOGIN：修改用户名。家目录，邮箱等不会改变
              ~]# usermod -l aaa user   （usermod -l 新用户名 原用户名）
              ~]# id aaa
                    uid=1003(aaa) gid=1003(user) groups=1003(user)

        -s, --shell  SHELL：修改用户登录shell
            ~]# usermod -s abc aaa

        -u, --uid  UID：修改用户uid
          ~]# id test1
                uid=5003(test1) gid=5003(test1) groups=5003(test1)
          ~]# usermod -u 4000 test1
          ~]# id test1
                uid=4000(test1) gid=5003(test1) groups=5003(test1)

        -L, --lock：锁定用户的密码。这会在用户加密的密码之前放置一个“!”
            ~]# usermod -L test1
            ~]# vi /etc/shadow
            test1:!!:16870:0:99999:7:::

        -U, --unlock：解锁用户的密码。这将移除加密的密码之前的“!”
            ~]# usermod -U test1
            ~]# vi /etc/shadow
             test1:!:16870:0:99999:7:::

---------------------------------------------------------------------------------------------
（3）userdel：删除用户帐户和相关文件
SYNOPSIS：
       userdel [options] LOGIN
OPTIONS：
          -r, --remove：家目录和用户邮箱一起删除
            ~]# userdel -r test
---------------------------------------------------------------------------------------------
（4）passwd：密码管理命令（输入的时候，屏幕上不会有任何提示 如：**）
SYNOPSIS：
        root用户：（无需输入原密码，密码可以简单化）
            root]# passwd test2
                New password: （新密码）
                Retype new password: （再次输入新密码）
                passwd: all authentication tokens updated successfully.

        当前用户：（输入原密码，新密码必须符合规范）
            mdx]$ passwd
                (current) UNIX password: （原密码）
                New password: （新密码）
                Retype new password: （再次输入新密码）

        密码规范：
            (1) 不能少于8个字符。
            (2) 不能使用与过去的密码太相似的密码。
            (3) 应该使用四类字符中的至少三类。
          
DESCRIPTION：
          -l：锁定密码
          -u：解锁解密
          -d：清除密码
            
          --stdin：从标准输入接收密码。
            echo "PASSWORD" | passwd  --stdin  USERNAME
---------------------------------------------------------------------------------------------
（5）id：打印真实有效的用户和组
SYNOPSIS：
       id [OPTION]... [USER]
DESCRIPTION：
      mdx]# id test
              uid=1001(test) gid=1001(test) groups=1001(test),1000(mdx)

       -g, --group：打印有效的用户主组id
            mdx]# id -g test
                      1001

       -G, --groups：打印所有的附加组
            mdx]# id -G test
                      1001 1000

       -u, --user：打印有效的用户id
            mdx]# id -u test
                      1001
---------------------------------------------------------------------------------------------
（6）su：用户切换
SYNOPSIS：
       su [options...] [-] [user [args...]]
OPTIONS：
        切换用户：
          (1) 不读取目标用户的配置文件（非登录式切换，半切换）；
            su  USERNAME
          (2) 读取目标用户的配置文件（登录式切换，完全切换）；
            su  -l  USERNAME
            su  -  USERNAME

        -c command, --command=command：仅以指定的用户的身份运行此处指定的命令，而不执行真正的身份切换操作；
---------------------------------------------------------------------------------------------
（7）chfn：改变用户信息
SYNOPSIS：
       chfn  [-f full-name] [-o office] ,RB [ -p office-phone] [-h home-phone] -u] [-v] [user‐
       name]
OPTIONS
       -f, --full-name full-name：指定真实用户名
       -o, --office office：指定办公室地址
       -p, --office-phone office-phone：设定办公室电话
       -h, --home-phone home-phone：设置家里手机号码
---------------------------------------------------------------------------------------------
（8）chsh： 改变登录shell
SYNOPSIS
       chsh [-s shell] [-l] [-u] [-v] [username]
OPTIONS
       -s, --shell shell：设定登录shell
       -l, --list-shells：打印shell列表并退出
---------------------------------------------------------------------------------------------



二：用户组的管理
---------------------------------------------------------------------------------------------
详解：/etc/group 
    格式：test:x:1007:
            组名：密码点位符：GID：以此组为附加组的用户列表，以逗号分隔
---------------------------------------------------------------------------------------------
（1）groupadd：添加组
SYNOPSIS：
       groupadd [options] group
OPTIONS：
        -g  GID：指明GID。
              mdx]# groupadd -g 2000 test1
              mdx]# tail -1 /etc/group
                          test1:x:2000:

        -r, --system：系统组。
            mdx]# groupadd -r test2
            mdx]# !tail -1 /etc/group
                        test2:x:990:
---------------------------------------------------------------------------------------------
（2）groupmod：修改组
SYNOPSIS：
       groupmod [options] GROUP
OPTIONS：
          -g  GID：改变组id
                mdx]# cat /etc/group | grep ^test2
                            test2:x:990:
                mdx]# groupmod -g 3000 test2
                mdx]# cat /etc/group | grep ^test2
                            test2:x:3000:

          -n, --new-name NEW_GROUP：修改组名。
                mdx]# cat /etc/group | grep ^test2
                            test2:x:3000:
                mdx]# groupmod -n test3 test2
                mdx]# cat /etc/group | grep ^test2      （test2组不存在）
                mdx]# cat /etc/group | grep ^test3
                            test3:x:3000:
---------------------------------------------------------------------------------------------
（3）groupdel：删除组
SYNOPSIS：
       groupdel [options] GROUP
OPTIONS：
      mdx]# cat /etc/group | grep ^test3
                test3:x:3000:
      mdx]# groupdel test3
      mdx]# cat /etc/group | grep ^test3
      mdx]# 
---------------------------------------------------------------------------------------------
（4）gpasswd：管理组  /etc/group 和 /etc/gshadow
SYNOPSIS：
       gpasswd [option] group
OPTIONS：
      修改组密码：
      mdx]# gpasswd test
                  Changing the password for group test
                  New Password: 
                  Re-enter new password: 
      mdx]# grep ^test /etc/gshadow
                  test:$6$4ixwfMX2abZ6Ug7$0HKG5LLycTh.nBhNYjth1r1kERPS6PZIfyyy6A15b/TNehEjKl3ua.TDOHBQwk.YIzyVb6.9mVrOPXh0GoO/J1::

       -a, --add user：添加用户到组
            mdx]# gpasswd -a mdx test
                      Adding user mdx to group test
            mdx]# grep ^test /etc/group
                      test:x:1001:mdx

       -d, --delete user：从组删除用户
            mdx]# gpasswd -d user test
                        Removing user user from group test
            mdx]# grep ^test /etc/group
                        test:x:1001:

       -r, --remove-password：删除密码，密码为空。
            ~]# gpasswd -r test
            ~]# grep ^test /etc/gshadow
                  test:::

       -R, --restrict：限制用户登入组，只有组中的成员才可以用newgrp加入该组 
              ~]# gpasswd -R test

       -A, --administrators user,...：指定管理员
            ~]# gpasswd -A mdx test
            ~]# grep ^test /etc/gshadow
                  test:!:mdx:mdx,user

       -M, --members user,...：指定组成员（覆盖原来）
              ~]# grep ^test /etc/group
                    test:x:1001:user,mdx,test1,test2
                    test1:x:1003:
                    test2:x:1004:
              ~]# gpasswd -M mdx test
              ~]# grep ^test /etc/group
                    test:x:1001:mdx
                    test1:x:1003:
                    test2:x:1004:
---------------------------------------------------------------------------------------------
（5）newgrp：登录到一个新的组
SYNOPSIS：
       newgrp [-] [group]
OPTIONS：
            ~]$ newgrp test
                  Password: 
---------------------------------------------------------------------------------------------
（6）chage：改变用户密码终止日期
　　参数意思：
　　-m, --mindays MIN_DAYS ：密码可更改的最小天数。为零时代表任何时候都可以更改密码。
　　-M, --maxdays MAX_DAYS ：密码保持有效的最大天数。
　　-W, --warndays WARN_DAYS ：用户密码到期前，提前收到警告信息的天数。
　　-E, --expiredate EXPIRE_DATE： 帐号到期的日期。过了这天，此帐号将不可用。（YYYY-MM-DD）
　　-d 上一次更改的日期。（YYYY-MM-DD）
　　-I, --inactive INACTIVE： 停滞时期。如果一个密码已过期这些天，那么此帐号将不可用。
　　-l 例出当前的设置。
          root]$ chage -l mdx
                    -d：最近一次密码修改时间                      : Mar 01, 2016
                    密码过期时间                                    : never
                    密码失效时间                                    : never
                    -E：帐户过期时间                                   : never
                    -m：两次改变密码之间相距的最小天数    : 0
                    -M：两次改变密码之间相距的最大天数    : 99999
                    -W：在密码过期之前警告的天数              :7